package com.code.train.util;

/**
 * ShowUtil
 *
 * @param
 * @author 南汉卿
 * @return
 * @date 2025/8/3 23:23
 */

//@Component
//public class RedisSnowflakeIdGenerator {
//
//    private static final String REDIS_KEY_PREFIX = "snowflake:machine:";
//    private static final long MAX_MACHINE_ID = 31;
//
//    private static final long DATACENTER_ID = 1; // 可配置，或从 Redis 获取
//
//    @Autowired
//    private RedisTemplate redisTemplate;
//
//    private Snowflake snowflake;
//
//    @PostConstruct
//    public void init() {
//        try {
//            String ip = getLocalIp();
//            String redisKey = REDIS_KEY_PREFIX + ip;
//
//            // 从 Redis 获取机器ID
//            String machineIdStr = (String) redisTemplate.opsForValue().get(redisKey);
//            long machineId;
//
//            if (StrUtil.isBlank(machineIdStr)) {
//                // 没有注册过，自动分配机器ID（原子自增）
//                machineId = redisTemplate.opsForValue().increment("snowflake:machine:counter") - 1;
//
//                if (machineId > MAX_MACHINE_ID) {
//                    throw new IllegalStateException("超过最大机器数限制（31）");
//                }
//
//                redisTemplate.opsForValue().set(redisKey, String.valueOf(machineId), 24, TimeUnit.HOURS);
//            } else {
//                machineId = Long.parseLong(machineIdStr);
//            }
//
//            this.snowflake = new Snowflake(DATACENTER_ID, machineId, false);
//        } catch (Exception e) {
//            throw new RuntimeException("初始化 Snowflake ID 生成器失败", e);
//        }
//    }
//
//    /**
//     * 生成唯一ID
//     */
//    public long nextId() {
//        return this.snowflake.nextId();
//    }
//
//    /**
//     * 可选：生成带业务前缀的ID，例如：ORDER_1234567890
//     */
//    public String nextId(String prefix) {
//        return prefix + "_" + this.nextId();
//    }
//
//    /**
//     * 获取本机 IP 地址
//     */
//    private String getLocalIp() throws Exception {
//        InetAddress inetAddress = NetUtil.getLocalhost();
//        return inetAddress.getHostAddress();
//    }
//}
//
